package com.cp.weixin.es.controller;

import com.alibaba.fastjson.JSON;

import com.cp.weixin.es.repository.Phrase;
import com.cp.weixin.util.ElasticsearchUtil;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.search.SearchHits;
import org.springframework.web.bind.annotation.*;

import java.util.UUID;

@RestController
@RequestMapping("/es")
public class EsSearchController {

    // @Value("${elasticsearch.index.name}")
    private static String indexName = "chengyu";

    // @Value("${elasticsearch.type}")
    private static String esType = "item";




    @RequestMapping("/addData")
    public IndexResponse addData() {
        Phrase phrase = new Phrase();
        phrase.setUuid(UUID.randomUUID().toString());
        phrase.setEntry("二脸懵逼");
        phrase.setContent("hello world");
        return ElasticsearchUtil.addData(phrase);
    }

    @RequestMapping("/search")
    public SearchHits search(@RequestParam(name = "text", defaultValue = "开心") String text, @RequestParam(name = "pageNum", defaultValue = "1") int pageNum){
        int from = ( pageNum - 1 ) * 20;
        SearchResponse searchResponse = ElasticsearchUtil.search(text, from, 20);
        System.err.println(JSON.toJSON(searchResponse).toString());
        return searchResponse.getHits();
    }

    /**
     * http://127.0.0.1:8080/es/createIndex
     * 创建索引
     *
     * @param request
     * @param response
     * @return
     */
//    @RequestMapping("/createIndex")
//    public String createIndex(HttpServletRequest request, HttpServletResponse response) {
//        if (!ElasticsearchUtil.isIndexExist(indexName)) {
//            ElasticsearchUtil.createIndex(indexName);
//        } else {
//            return "索引已经存在";
//        }
//        return "索引创建成功";
//    }
//
//
//    /**
//     * 插入记录
//     *
//     * @return
//     */
//    @RequestMapping("/insertJson")
//    public String insertJson() {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("id", UUID.randomUUID().toString());
//        jsonObject.put("entry", "");
//        jsonObject.put("pinyin", "");
//        jsonObject.put("content", "");
//        String id = ElasticsearchUtil.addData(jsonObject, indexName, esType, jsonObject.getString("id"));
//        return id;
//    }
//
//    /**
//     * 插入记录
//     *
//     * @return
//     */
//    @RequestMapping("/insertModel")
//    public String insertModel() throws Exception {
////        EsModel esModel = new EsModel();
////        esModel.setId(DateUtil.formatDate(new Date()));
////        esModel.setName("m-" + new Random(100).nextInt());
////        esModel.setAge(30);
////        esModel.setDate(new Date());
//        List<String> list = FileUtils.readLines(new File("/Users/wanghonghui/IdeaProjects/weixinspider/src/main/resources/content.txt"), "UTF-8");
//
//        for(String line : list) {
//            ItemDocument esModel = new ItemDocument();
//            esModel.setId(line.split("\t")[0]);
//            esModel.setEntry(line.split("\t")[1]);
//            esModel.setPinyin(line.split("\t")[2]);
//            esModel.setContent(line.split("\t")[3]);
//            JSONObject jsonObject = (JSONObject) JSONObject.toJSON(esModel);
//            String id = ElasticsearchUtil.addData(jsonObject, indexName, esType, jsonObject.getString("id"));
//        }
//
//        return "ok";
//    }
//
//    /**
//     * 删除记录
//     *
//     * @return
//     */
//    @RequestMapping("/delete")
//    public String delete(String id) {
//        if (StringUtils.isNotBlank(id)) {
//            ElasticsearchUtil.deleteDataById(indexName, esType, id);
//            return "删除id=" + id;
//        } else {
//            return "id为空";
//        }
//    }
//
//    /**
//     * 更新数据
//     *
//     * @return
//     */
//    @RequestMapping("/update")
//    public String update(String id) {
//        if (StringUtils.isNotBlank(id)) {
//            JSONObject jsonObject = new JSONObject();
////            jsonObject.put("id", id);
//            ElasticsearchUtil.updateDataById(jsonObject, indexName, esType, id);
//            return "id=" + id;
//        } else {
//            return "id为空";
//        }
//    }
//
//    /**
//     * 获取数据
//     * http://127.0.0.1:8080/es/getData?id=2018-04-25%2016:33:44
//     *
//     * @param id
//     * @return
//     */
//    @RequestMapping("/getData")
//    public String getData(String id) {
//        if (StringUtils.isNotBlank(id)) {
//            Map<String, Object> map = ElasticsearchUtil.searchDataById(indexName, esType, id, null);
//            return JSONObject.toJSONString(map);
//        } else {
//            return "id为空";
//        }
//    }
//
//    /**
//     * 查询数据
//     * 模糊查询
//     *
//     * @return
//     */
//    @RequestMapping("/queryMatchData")
//    public String queryMatchData() {
//        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//        boolean matchPhrase = false;
//        if (matchPhrase == Boolean.TRUE) {
//            //不进行分词搜索
//            boolQuery.must(QueryBuilders.matchPhraseQuery("entry", "m"));
//        } else {
//            boolQuery.must(QueryBuilders.matchQuery("entry", "m-m"));
//        }
//        List<Map<String, Object>> list = ElasticsearchUtil.
//                searchListData(indexName, esType, boolQuery, 10, "name", null, "name");
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 通配符查询数据
//     * 通配符查询 ?用来匹配1个任意字符，*用来匹配零个或者多个字符
//     *
//     * @return
//     */
//    @RequestMapping("/queryWildcardData")
//    public String queryWildcardData() {
//        QueryBuilder queryBuilder = QueryBuilders.wildcardQuery("name.keyword", "j-?466");
//        List<Map<String, Object>> list = ElasticsearchUtil.searchListData(indexName, esType, queryBuilder, 10, null, null, null);
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 正则查询
//     *
//     * @return
//     */
//    @RequestMapping("/queryRegexpData")
//    public String queryRegexpData() {
//        QueryBuilder queryBuilder = QueryBuilders.regexpQuery("name.keyword", "m--[0-9]{1,11}");
//        List<Map<String, Object>> list = ElasticsearchUtil.searchListData(indexName, esType, queryBuilder, 10, null, null, null);
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 查询数字范围数据
//     *
//     * @return
//     */
//    @RequestMapping("/queryIntRangeData")
//    public String queryIntRangeData() {
//        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//        boolQuery.must(QueryBuilders.rangeQuery("age").from(21)
//                .to(25));
//        List<Map<String, Object>> list = ElasticsearchUtil.searchListData(indexName, esType, boolQuery, 10, null, null, null);
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 查询日期范围数据
//     *
//     * @return
//     */
//    @RequestMapping("/queryDateRangeData")
//    public String queryDateRangeData() {
//        BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//        boolQuery.must(QueryBuilders.rangeQuery("date").from("2018-04-25T08:33:44.840Z")
//                .to("2019-04-25T10:03:08.081Z"));
//        List<Map<String, Object>> list = ElasticsearchUtil.searchListData(indexName, esType, boolQuery, 10, null, null, null);
//        return JSONObject.toJSONString(list);
//    }
//
//    /**
//     * 查询分页
//     *
//     * @param startPage 第几条记录开始
//     *                  从0开始
//     *                  第1页 ：http://127.0.0.1:8080/es/queryPage?startPage=0&pageSize=2
//     *                  第2页 ：http://127.0.0.1:8080/es/queryPage?startPage=2&pageSize=2
//     * @param pageSize  每页大小
//     * @return
//     */
//    @RequestMapping("/queryPage")
//    public String queryPage(String startPage, String pageSize) {
//        if (StringUtils.isNotBlank(startPage) && StringUtils.isNotBlank(pageSize)) {
//            BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
//            boolQuery.must(QueryBuilders.rangeQuery("date").from("2018-04-25T08:33:44.840Z")
//                    .to("2019-04-25T10:03:08.081Z"));
//            EsPage list = ElasticsearchUtil.searchDataPage(indexName, esType, Integer.parseInt(startPage), Integer.parseInt(pageSize), boolQuery, null, null, null);
//            return JSONObject.toJSONString(list);
//        } else {
//            return "startPage或者pageSize缺失";
//        }
//    }
//
//    @RequestMapping("/search")
//    public EsPage query(@RequestParam(name = "pageNum") Integer pageNum, @RequestParam(name = "queryString") String queryString) {
//        //todo
////        queryString = queryString
//
//        QueryStringQueryBuilder builder = QueryBuilders.queryStringQuery(queryString);
//        return ElasticsearchUtil.searchDataPage(indexName, esType, pageNum, 20, builder, null, null, null);
//    }

}
